﻿namespace StockSharp.Algo.Indicators.Oscillator
{
	using System;

	/// <summary>
	/// Сигнальная часть индикатора <see cref="RelativeVigorIndex"/>.
	/// </summary>
	public class RelativeVigorIndexSignal : LengthIndicator<decimal>
	{
		/// <summary>
		/// Создать <see cref="RelativeVigorIndexSignal"/>.
		/// </summary>
		public RelativeVigorIndexSignal()
			: base(typeof(decimal))
		{
			base.Length = 4;
		}

		/// <summary>
		/// Длина периода.
		/// </summary>
		public override int Length
		{
			set
			{
				throw new NotSupportedException("Изменение длины не поддерживается данным индикатором.");
			}
		}

		/// <summary>
		/// Обработать входное значение.
		/// </summary>
		/// <param name="input">Входное значение.</param>
		/// <returns>Результирующее значение.</returns>
		protected override decimal OnProcess(IIndicatorValue input)
		{
			var value = input.GetValue<decimal>();
			Buffer.Add(value);

			if (IsFormed)
			{
				return (Buffer[0] + 2 * Buffer[1] + 2 * Buffer[2] + Buffer[3]) / 6m;
			}
			else
				return 0;
		}
	}
}